package cn.walls1717.wallsmall.order.service;

import cn.walls1717.wallsmall.common.pojo.to.mq.SeckillOrderTO;
import cn.walls1717.wallsmall.order.pojo.vo.*;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.walls1717.wallsmall.common.utils.PageUtils;
import cn.walls1717.wallsmall.order.entity.OrderEntity;

import java.util.Map;
import java.util.concurrent.ExecutionException;

/**
 * 订单
 *
 * @author walls1717
 * @email walls1717@163.com
 * @date 2022-10-21 13:23:17
 */
public interface OrderService extends IService<OrderEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 获取订单确认信息
     *
     * @return 订单确认信息
     */
    OrderConfirmVO getOrderConfirm() throws ExecutionException, InterruptedException;

    /**
     * 下单
     *
     * @param orderSubmitVO 订单数据
     * @return 下单成功响应数据
     */
    OrderSubmitRespVO submitOrder(OrderSubmitVO orderSubmitVO);

    /**
     * 根据orderSn获取订单信息
     *
     * @param orderSn orderSn
     * @return 订单信息
     */
    OrderEntity getOrderByOrderSn(String orderSn);

    /**
     * 关闭过期订单
     *
     * @param order 订单
     */
    void closeDelayOrder(OrderEntity order);

    /**
     * 获取当前订单的支付信息
     *
     * @param orderSn orderSn
     * @return 订单支付信息
     */
    PayVO getOrderPay(String orderSn);

    /**
     * 获取当前用户的订单分页列表
     *
     * @param params 分页参数
     * @return 当前用户订单列表分页参数
     */
    PageUtils listPagesWithItem(Map<String, Object> params);

    /**
     * 处理支付宝直接结果
     *
     * @param payAsyncVO 支付数据
     * @return 处理结果
     */
    String payResultHandler(PayAsyncVO payAsyncVO);

    /**
     * 创建秒杀订单
     *
     * @param seckillOrderTO 秒杀订单数据
     */
    void addSeckillOrder(SeckillOrderTO seckillOrderTO);

}

